home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-28 | 3.2 KB | 161 lines | [TEXT/MPS ] |
- // dependencies.c
- //
- // dependency functions for CIncludesCode MPW tool
-
- #include "CIncludesCode.h"
- #include <Memory.h>
- #include <StdIO.h>
-
- extern long numFiles;
- extern ptrArray *argvPtr;
- extern strArray **filesHdl;
- extern Handle dependencies;
-
- Handle tempDependencies;
-
- Boolean isDependent(char *depPtr,short oldFile,short newFile)
- // true if oldFile dependent on newFile
-
- {
- return ((Boolean) (*(depPtr + (oldFile * numFiles) + newFile)));
- } // isDependent()
-
- void setDependency(Handle depHdl,short oldFile,short newFile,Boolean value)
- {
- *(*depHdl + (oldFile * numFiles) + newFile) = (char) value;
- } // setDependency()
-
- long nextInclude(Handle dataHdl,long pos,long limit)
- // returns offset of next #include filename
-
- {
- char *p = StripAddress(*dataHdl + pos);
- char *q = StripAddress(*dataHdl + limit);
- char ch;
-
- while (p < q)
- {
- ch = *p++;
- if (ch == '#')
- {
- if (isString(p,"include"))
- {
- return ((long) (p - StripAddress(*dataHdl)));
- } // if isString()
- else
- {
- while ((*p++ != '\n') && (p < q))
- ;
- } // else if isString()
- } // if ch
- else
- {
- if (ch > ' ')
- {
- while ((*p++ != '\n') && (p < q))
- ;
- } // if ch
- } // else if ch
- } // while p
- return limit;
- } // nextInclude()
-
- void extractFileName(char *dest,char *src)
- {
- while ((*src != '<') && (*src != '"'))
- {
- ++src;
- } // while *src
- ++src;
-
- while ((*src != '>') && (*src != '"'))
- {
- *dest++ = *src++;
- } // while *src
- *dest = '\0';
- } // extractFileName
-
- void extractIncludes(Handle dataHdl,short curFile)
- {
- long pos = 0;
- short index = 0;
- short fileIndex;
- long limit = GetHandleSize(dataHdl) - 1;
- char s[64];
-
- while ((pos = nextInclude(dataHdl,pos,limit)) < limit)
- {
- extractFileName(s,(*dataHdl + pos));
- if ((fileIndex = getFileIndex(s)) != -1)
- {
- setDependency(tempDependencies,curFile,fileIndex,true);
- } // if fileIndex
- } // while pos
- } // extractIncludes
-
- void expandDependencies(short curExpanded,short curFile)
- {
- short i;
-
- setDependency(dependencies,curExpanded,curFile,true);
- for (i = 0; i < numFiles; ++i)
- {
- if (isDependent(*tempDependencies,curFile,i) && !isDependent(*dependencies,curExpanded,i))
- {
- expandDependencies(curExpanded,i); // recursion
- } // if isDependent
- } // for i
- } // setDependency
-
- void makeDependencyArray(void)
- {
- short i;
- Handle dataHdl;
-
- fprintf(stderr,"Collecting \"#Includes\" data...\n");
-
- tempDependencies = NewHandleClear(numFiles * numFiles);
- checkMemory();
-
- for (i = 0; i < numFiles; ++i)
- {
- dataHdl = loadDataFile((*argvPtr)[i+2]);
- extractIncludes(dataHdl,i);
- DisposHandle(dataHdl);
- } // for i
-
- fprintf(stderr,"Calculating dependency array...\n");
-
- dependencies = NewHandleClear(numFiles * numFiles);
- checkMemory();
-
- for (i = 0; i < numFiles; ++i)
- {
- expandDependencies(i,i);
- } // for i
-
- DisposHandle(tempDependencies);
- } // makeDependencyArray()
-
- void printDependencyArray(void)
- // 12-page printout of filesnames and dependencies
-
- {
- short i,j;
-
- fprintf(stderr,"\n");
-
- for (i = 0; i < numFiles; ++i)
- {
- fprintf(stderr,"\nfile: %s\n",(**filesHdl)[i]);
- for (j = 0; j < numFiles; ++j)
- {
- if (isDependent(*dependencies,i,j))
- {
- fprintf(stderr,"%s\n",(**filesHdl)[j]);
- } // if isDependent
- } // for j
- } // for i
- } // printDependencyArray()
-
- // end of dependencies.c